#include <qapplication.h>
#include <Gfed/Gfed.hpp>
#include <mainwindow.h>
#include <Core/Core.hpp>


//////////////////////////////////////////////////////////////////////////
// Overload google logging.
class QtLogger : public google::LogSink
{
public:
	//////////////////////////////////////////////////////////////////////////
	QtLogger( MainWindow* mainWindow )
	:	mpWindow( mainWindow )
	{
	}

	//////////////////////////////////////////////////////////////////////////
	virtual void			send(	google::LogSeverity		severity,
									const char*				full_filename,
									const char*				base_filename, int line,
									const struct ::tm*		tm_time,
									const char*				message, size_t message_len
								) override
	{
		std::string	logString	=	ToString( severity, base_filename, line, tm_time, message, message_len );
		mpWindow->logMessage( logString );
	}

private:
	//////////////////////////////////////////////////////////////////////////
	MainWindow*				mpWindow;
};


//////////////////////////////////////////////////////////////////////////
int main( int argc, char** argv )
{
	//////////////////////////////////////////////////////////////////////////
	// Setup Qt.
	QApplication	app( argc, argv );
	QCoreApplication::setOrganizationName( "HiwasWare" );
	QCoreApplication::setOrganizationDomain( "hiwasware.com" );
	QCoreApplication::setApplicationName( "Gfed" );
	QCoreApplication::setApplicationVersion( "0.1" );

	//////////////////////////////////////////////////////////////////////////
	// Initialize glog/flags/etc.
	google::ParseCommandLineFlags( &argc, &argv, true );
#ifndef OS_WINDOWS
	google::InstallFailureSignalHandler();
#endif
	google::LogToStderr();
	google::InitGoogleLogging( argv[ 0 ] );

	//////////////////////////////////////////////////////////////////////////
	// Bring up the main window.
	MainWindow		mainWindow;

	//////////////////////////////////////////////////////////////////////////
	// Link the glog traffic to the main window log info.
	QtLogger		qtLogger( &mainWindow );
	google::AddLogSink( &qtLogger );

	//////////////////////////////////////////////////////////////////////////
	// Show the main window and execute the application.
	mainWindow.show();
	int	result	=	app.exec();

	//////////////////////////////////////////////////////////////////////////
	// Shutdown logging.
	google::ShutdownGoogleLogging();
	return result;
}
